"""
1.出现异常后，程序就会终止，为了不影响后续执行，就需要进行异常的捕获

2.捕获异常的作用在于：提前假设某处会出现异常，做好提前准备，当真的出现异常的时候，可以有后续手段


3.为什么要捕获异常？
在可能发生异常的地方，进行捕获， 当异常出现的时候，提供解决方式，而不是任由其导致程序无法运行。


4.捕获异常的语法格式：
try:
    可能会出现异常的代码
except 异常类型1:
    针对异常类型1
except 异常类型2:
    针对异常类型2
except Exception as result:
    result:异常的描述信息
else:
    没有异常才会执行的代码
finally:
    无论是否出现异常，都会执行的代码




"""

print("===============================基本的捕获方式")
# 基本的捕获方式
try:
    # 通过open，读取一个不存在的文件
    f = open("./02.txt", mode="r", encoding="utf-8")
except:
    print("出现异常了，因为文件不存在，我将open的模式，改次W模式去打开")
    f = open("./02.txt", mode="w", encoding="utf-8")
print("基本的捕获方式end")

print("===============================捕获指定的异常")
# 捕获指定的异常
try:
    # print(name)
    1 / 0
except NameError as e:
    print("捕获到NameError异常，异常描述信息为：", e)
except ZeroDivisionError as e:
    print("捕获到ZeroDivisionError异常，异常描述信息为：", e)

print("捕获指定的异常end")

print("===============================捕获多个异常")
# 捕获多个异常
try:
    # print(name)
    1 / 0
except (NameError, ZeroDivisionError) as e:
    print("出现了变量未定义 或者 除以0的异常错误：", e)

print("捕获多个异常end")

# print("===============================未正确设置捕获异常类型异常，将无法捕获异常")
# # 未正确设置捕获异常类型，将无法捕获异常
# try:
#     1 / 0
# except NameError as e:
#     print("捕获到NameError异常，异常描述信息为：", e)


print("===============================捕获所有异常")
# 捕获所有异常
try:
    1 / 0
except Exception as e:
    print("出现了异常", e)

print("===============================异常的finally")
try:
    1 / 0
except Exception as e:
    print("出现了异常", e)
else:
    print("如果没有出现异常，执行else中的代码")
finally:
    print("无论是否出现异常，都会执行finally中的代码")
